package com.itkjb.leisurely.resource.sys.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.itkjb.leisurely.core.base.service.impl.BaseServiceImpl;
import com.itkjb.leisurely.resource.sys.mapper.SysRoleMapper;
import com.itkjb.leisurely.resource.sys.model.SysRoleModel;
import com.itkjb.leisurely.resource.sys.service.ISysRoleService;
import com.itkjb.leisurely.resource.sys.service.support.DepIdsUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 用户角色 服务实现类
 * </p>
 *
 * @author leisure_gen
 * @since leisure_gen
 */
@Service
public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRoleModel> implements ISysRoleService {

    @Override
    public List<SysRoleModel> findRoleIdAndCodeByUserId(String userId) {
        return this.baseMapper.findRoleIdAndCodeByUserId(userId);
    }

    @Override
    public List<SysRoleModel> listForDepEnable(String depId) {
        List<SysRoleModel> sysRoleModels = this.baseMapper.listForDepEnable(depId);
        if(sysRoleModels !=null && sysRoleModels.size()>0){
            List<SysRoleModel> collect = sysRoleModels.stream().filter(role -> {
                boolean bln =false;
                if(role.getUseRange()==0){
                    bln = true;
                }else if(depId.equals(role.get_depIds())){
                    bln = true;
                } else if (StringUtils.isNotBlank(role.getDepId()) &&
                        DepIdsUtil.getSubDepIds(role.getDepId()).contains(depId)
                    ){
                    bln = true;
                }
                return bln;
            }).collect(Collectors.toList());
        }
        return this.baseMapper.listForDepEnable(depId);
    }

    /**
     * wrapper 组装器，构造条件查询
     * @author itkjb.com
     * @date  2020-08-14
     * @param wrapper
     * @param model 条件
     **/
    @Override
    protected void assembleWrapper(QueryWrapper<SysRoleModel> wrapper, SysRoleModel model) {
        // （代码生成器生成）自动生成了，list查询的时候，条件组装，开发者自行删除不需要的条件
        // 角色名称
        wrapper.lambda().like(StringUtils.isNotBlank(model.getName()), SysRoleModel::getName, model.getName() );
        // 角色代码
        wrapper.lambda().eq(StringUtils.isNotBlank(model.getCode()), SysRoleModel::getCode, model.getCode() );
        // 组织id
        wrapper.lambda().eq(StringUtils.isNotBlank(model.getDepId()), SysRoleModel::getDepId, model.getDepId() );
        if(model.get_depIds()!=null && model.get_depIds().size()>0){
            wrapper.lambda().in( SysRoleModel::getDepId, model.get_depIds() );
        }
        // 状态  1 启用  0 禁用
        wrapper.lambda().eq(model.getStatus() != null, SysRoleModel::getStatus, model.getStatus() );
        // 排序
        wrapper.lambda().eq(model.getPaixu() != null, SysRoleModel::getPaixu, model.getPaixu() );
        // 角色类型 0：普通角色 ；16：系统内置角色不可删除
        wrapper.lambda().eq(model.getType() != null, SysRoleModel::getType, model.getType() );
        // 使用范围 0：所有组织可用， 1：当前组织以及下级组织可用，2：仅限当前组织可用
        wrapper.lambda().eq(model.getUseRange() != null, SysRoleModel::getUseRange, model.getUseRange() );

    }

    /**
     * wrapper 组装器，组装list查询时，查询的列
     * @author itkjb.com
     * @date  2020-08-14
     * @param wrapper
     * @param model
     * @return void
     * @since 2020-08-14
     **/
    @Override
    protected void buildListSelectColumns(QueryWrapper<SysRoleModel> wrapper, SysRoleModel model){
        buildCommonSelectColumns(wrapper, model);
    }

    /**
     * 组装列表查询的列（字段）
     * @date  2020-08-14
     * @param wrapper
     * @param model
     */
    protected void buildCommonSelectColumns(QueryWrapper<SysRoleModel> wrapper, SysRoleModel model){
        // 代码生成器生成，为了简化开发时，查询list时，查询指定字段，没必要查询所有参数
        wrapper.lambda().select(
                // id
                SysRoleModel::getId,
                // 角色名称
                SysRoleModel::getName,
                // 角色代码
                SysRoleModel::getCode,
                // 组织id
                SysRoleModel::getDepId,
                // 状态  1 启用  0 禁用
                SysRoleModel::getStatus,
                // 排序
                SysRoleModel::getPaixu,
                // 备注
                SysRoleModel::getRemark,
                // 角色类型 0：普通角色 ；16：系统内置角色不可删除
                SysRoleModel::getType,
                // 使用范围 0：所有组织可用， 1：当前组织以及下级组织可用，2：仅限当前组织可用
                SysRoleModel::getUseRange,
                SysRoleModel::getCreateTime
        );
    }


}
